package com.software.levelupserver.mappers;

import com.software.levelupserver.entity.Task;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface TaskMapper {
    int insertTask(Task task); //新增无开始时间的任务（即待办）
    int insertNoticeTask(Task task); //新增通知型任务
    int insertTimingTask1(Task task); //新增一个提醒时间的计时型任务
    int insertTimingTask2(Task task); //新增两个提醒时间的计时型任务
    int insertTimingTask3(Task task); //新增三个提醒时间的计时型任务
    int insertSystemTask(Task task); //新增系统任务

    boolean updateTask(Task task); //新增无开始时间的任务（即待办）
    boolean updateNoticeTask(Task task); //新增通知型任务
    boolean updateTimingTask1(Task task); //新增一个提醒时间的计时型任务
    boolean updateTimingTask2(Task task); //新增两个提醒时间的计时型任务
    boolean updateTimingTask3(Task task); //新增三个提醒时间的计时型任务

    boolean deleteTask(Task task);

    List<Task> selectTodoTasks(@Param("userId") int userId);
    List<Task> selectAllTasksByDate(@Param("date") String date, @Param("userId") int userId);
    List<Task> selectTodayTasksByType(@Param("date") String date, @Param("userId") int userId,
                                      @Param("taskType") int taskType);
    List<Task> selectTodayTasks(@Param("date") String date, @Param("userId") int userId,
                                @Param("offset") int offset, @Param("limit") int limit); //分页查询当天的所有任务
    List<Task> selectNoTimeTasks(@Param("userId") int userId, @Param("offset") int offset,
                                 @Param("limit") int limit); //分页查询无开始时间的任务
    List<Task> selectTasksByTaskType(@Param("date") String date, @Param("userId") int userId,
                                     @Param("taskType") int taskType, @Param("offset") int offset,
                                     @Param("limit") int limit); //按任务类型分页查询任务
    Task selectTaskByTaskId(@Param("taskId") int taskId); //根据taskId查询task
    List<Task> selectAllTasksByStatus(@Param("userId") int userId, @Param("status") int status); //根据status查询任务
    List<Task> selectTasksByPriority(@Param("date") String date, @Param("userId") int userId,
                                     @Param("priority") int priority); //根据priority查询任务

    List<Task> selectAllTasks();

    int countTasks(@Param("date") String date);
    int countAllTask();
    int selectCountByDate(String date);

    List<Task> selectTasksByMonthAndStatus(@Param("userId") int userId,@Param("month") String month);//根据月份查询
}
